﻿using System;
using System.Collections.Generic;
using System.Text;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using BussinessLogicTecnoPez.Tipos_Comunes;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using DataAccessTecnoPez;
using System.Data.OleDb;

namespace BussinessLogicTecnoPez.Produccion.Compras
{
    [Serializable]
    [DBTable("LOTESOVAS")]
    public class LoteOva : EntityBase<LoteOva>
    {
        private int _idLoteOva;
        private DateTime _fechaIngreso;
        private Especie _objEspecie;
        private int _cantidad;
        private TipoEstadoLoteOvas _objTipoEstado;
        private string _codigo;
        private Proveedor _objProveedor;




        [DBField("IDLOTEOVA", true, true)]
        [FriendlyName("IdLoteOva", false)]
        public int IdLoteOva
        {
            get { return _idLoteOva; }
            set { _idLoteOva = value; }
        }

        [NotNullValidator(MessageTemplate = "Código: Debe tener algun valor.")]
        [StringLengthValidator(0, 15, MessageTemplate = "Código: Tamaño máximo es de 15 carateres.")]
        [TecnoPezNoEmptyStringValidator("Código: Debe tener algun valor.")]
        [DBField("CODIGO", false, false)]
        [FriendlyName("Código", true, true, FriendlyName.FilterType.String)]
        public string Codigo
        {
            get { return _codigo; }
            set { _codigo = value; }
        }

        [DBField("FECHAINGRESO", false, false)]
        [FriendlyName("Fecha Ingreso", false)]
        public DateTime FechaIngreso
        {
            get { return _fechaIngreso.Date; }
            set { _fechaIngreso = value; }
        }

        [FriendlyName("Fecha Ingreso", true)]
        public string FechaString
        {
            get
            {
                return this.FechaIngreso.ToShortDateString();
            }
        }

        [NotNullValidator(MessageTemplate = "Cantidad: Debe tener algún valor.")]
        [DBField("CANTIDAD", false, false)]
        [FriendlyName("Cantidad", true)]
        public Int32 Cantidad
        {
            get { return _cantidad; }
            set { _cantidad = value; }
        }

        [NotNullValidator(MessageTemplate = "Especie: Debe tener algún valor.")]
        [DBField("IDESPECIE", false, false, true, "IDESPECIE")]
        [FriendlyName("Especie", false)]
        public Especie Especie
        {
            get { return _objEspecie; }
            set { _objEspecie = value; }
        }

        [NotNullValidator(MessageTemplate = "Proveedor: Debe tener algún valor.")]
        [DBField("IDPROVEEDOR", false, false, true, "IDPROVEEDOR")]
        [FriendlyName("Proveedor", false)]
        public Proveedor Proveedor
        {
            get { return _objProveedor; }
            set { _objProveedor = value; }
        }

        [DBField("IDTIPOESTADOLOTEOVA", false, false, true, "IDTIPOESTADOLOTEOVA")]
        [FriendlyName("Estado", true)]
        public TipoEstadoLoteOvas TipoEstadoLoteOva
        {
            get { return _objTipoEstado; }
            set { _objTipoEstado = value; }
        }

        private Estanque estanqueDeIncubacion;


        public List<Estanque> obtenerEstanquesDeIncubacion()
        {
            using (SQL sql = new SQL())
            {
                List<Estanque> result= new List<Estanque>();
                sql.SqlString = "SELECT CLASIFICACIONES.IDESTANQUEDESTINO " +
                               "FROM DETALLECLASIFICACION LEFT OUTER JOIN " +
                               "CLASIFICACIONES ON DETALLECLASIFICACION.IDCLASIFICACION = CLASIFICACIONES.IDCLASIFICACION " +
                               "WHERE     (DETALLECLASIFICACION.PROPORCION = 1) AND (DETALLECLASIFICACION.IDESTANQUEORIGEN IS NULL) AND " +
                               "(DETALLECLASIFICACION.IDLOTEOVA = ?) " +
                               "ORDER BY DETALLECLASIFICACION.IDDETALLECLASIFICACION desc";
                OleDbDataReader dr;
                dr = sql.GetDataReader(this.IdLoteOva);
                while (dr.Read())
                {
                    Estanque estanqueDeIncubacion = Estanque.getManager.GetOneByPrimaryKey(dr[0]);
                    result.Add(estanqueDeIncubacion);
                }
                dr.Close();
                return result;

            }
        }

        public override string ToString()
        {
            return this.Codigo;
        }
    }
}
